Micron Document
🎖️GitЯра🎖️

Node / meshcore / MeshCore / files / src / helpers / ui / DisplayDriver.h

Displaying Raw • Download

src/helpers/ui/DisplayDriver.h 890a2e2cffa98dea3ca88db3c3aba72ef23ff3f7 (890a2e2c) Text, 3.74 KB

Tff7b72#Tff7b72pragma once

Tff7b72#Tff7b72include T8b949e<stdint.h>
Tff7b72#Tff7b72include T8b949e<string.h>

Te6edf3using Te6edf3ColorVal Tff7b72= Tffa657uint16_tTb4b4b4;

Te6edf3class Te6edf3UIColor Tb4b4b4{
Te6edf3publicTff7b72:
T8b949e// color definitions (by element _type_)
Tff7b72static Te6edf3ColorVal Te6edf3window_bkgTb4b4b4, Te6edf3title_bkgTb4b4b4, Te6edf3title_txtTb4b4b4, Te6edf3primary_txtTb4b4b4, Te6edf3secondary_txtTb4b4b4, Te6edf3warning_txtTb4b4b4, Te6edf3popup_bkgTb4b4b4, Te6edf3popup_txtTb4b4b4, Te6edf3corp_blueTb4b4b4;
Tb4b4b4}Tb4b4b4;

Te6edf3class Te6edf3DisplayDriver Tb4b4b4{
Tffa657int Te6edf3_wTb4b4b4, Te6edf3_hTb4b4b4;
Te6edf3protectedTff7b72:
Te6edf3DisplayDriverTb4b4b4(Tffa657int Te6edf3wTb4b4b4, Tffa657int Te6edf3hTb4b4b4) Tb4b4b4{ Te6edf3_w Tff7b72= Te6edf3wTb4b4b4; Te6edf3_h Tff7b72= Te6edf3hTb4b4b4; Tb4b4b4}
Te6edf3publicTff7b72:
T8b949e//enum Color { DARK=0, LIGHT, RED, GREEN, BLUE, YELLOW, ORANGE }; // on b/w screen, colors will be !=0 synonym of light

Tffa657int Te6edf3widthTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{ Tff7b72return Te6edf3_wTb4b4b4; Tb4b4b4}
Tffa657int Te6edf3heightTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{ Tff7b72return Te6edf3_hTb4b4b4; Tb4b4b4}

Te6edf3virtual Tffa657bool Te6edf3isOnTb4b4b4(Tb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3virtual Tffa657bool Te6edf3isEinkTb4b4b4(Tb4b4b4) Tb4b4b4{ Tff7b72return Tffa657falseTb4b4b4; Tb4b4b4} T8b949e// default to non-eink, override in eink drivers
Te6edf3virtual Tffa657void Te6edf3turnOnTb4b4b4(Tb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3virtual Tffa657void Te6edf3turnOffTb4b4b4(Tb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3virtual Tffa657void Te6edf3clearTb4b4b4(Tb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3virtual Tffa657void Te6edf3startFrameTb4b4b4(Te6edf3ColorVal Te6edf3bkg Tff7b72= Te6edf3UIColorTff7b72:Tff7b72:Te6edf3window_bkgTb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3virtual Tffa657void Te6edf3setTextSizeTb4b4b4(Tffa657int Te6edf3szTb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3virtual Tffa657void Te6edf3setColorTb4b4b4(Te6edf3ColorVal Te6edf3cTb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3virtual Tffa657void Te6edf3setCursorTb4b4b4(Tffa657int Te6edf3xTb4b4b4, Tffa657int Te6edf3yTb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3virtual Tffa657void Te6edf3printTb4b4b4(Tff7b72const Tffa657charTff7b72* Te6edf3strTb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3virtual Tffa657void Te6edf3printWordWrapTb4b4b4(Tff7b72const Tffa657charTff7b72* Te6edf3strTb4b4b4, Tffa657int Te6edf3max_widthTb4b4b4) Tb4b4b4{ Te6edf3printTb4b4b4(Te6edf3strTb4b4b4)Tb4b4b4; Tb4b4b4} T8b949e// fallback to basic print() if no override
Te6edf3virtual Tffa657void Te6edf3fillRectTb4b4b4(Tffa657int Te6edf3xTb4b4b4, Tffa657int Te6edf3yTb4b4b4, Tffa657int Te6edf3wTb4b4b4, Tffa657int Te6edf3hTb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3virtual Tffa657void Te6edf3drawRectTb4b4b4(Tffa657int Te6edf3xTb4b4b4, Tffa657int Te6edf3yTb4b4b4, Tffa657int Te6edf3wTb4b4b4, Tffa657int Te6edf3hTb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3virtual Tffa657void Te6edf3drawXbmTb4b4b4(Tffa657int Te6edf3xTb4b4b4, Tffa657int Te6edf3yTb4b4b4, Tff7b72const Tffa657uint8_tTff7b72* Te6edf3bitsTb4b4b4, Tffa657int Te6edf3wTb4b4b4, Tffa657int Te6edf3hTb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3virtual Tffa657uint16_t Te6edf3getTextWidthTb4b4b4(Tff7b72const Tffa657charTff7b72* Te6edf3strTb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3virtual Tffa657void Te6edf3drawTextCenteredTb4b4b4(Tffa657int Te6edf3mid_xTb4b4b4, Tffa657int Te6edf3yTb4b4b4, Tff7b72const Tffa657charTff7b72* Te6edf3strTb4b4b4) Tb4b4b4{ T8b949e// helper method (override to optimise)
Tffa657int Te6edf3w Tff7b72= Te6edf3getTextWidthTb4b4b4(Te6edf3strTb4b4b4)Tb4b4b4;
Te6edf3setCursorTb4b4b4(Te6edf3mid_x Tff7b72- Te6edf3wTff7b72/T79c0ff2Tb4b4b4, Te6edf3yTb4b4b4)Tb4b4b4;
Te6edf3printTb4b4b4(Te6edf3strTb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3virtual Tffa657void Te6edf3drawTextRightAlignTb4b4b4(Tffa657int Te6edf3x_anchTb4b4b4, Tffa657int Te6edf3yTb4b4b4, Tff7b72const Tffa657charTff7b72* Te6edf3strTb4b4b4) Tb4b4b4{
Tffa657int Te6edf3w Tff7b72= Te6edf3getTextWidthTb4b4b4(Te6edf3strTb4b4b4)Tb4b4b4;
Te6edf3setCursorTb4b4b4(Te6edf3x_anch Tff7b72- Te6edf3wTb4b4b4, Te6edf3yTb4b4b4)Tb4b4b4;
Te6edf3printTb4b4b4(Te6edf3strTb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3virtual Tffa657void Te6edf3drawTextLeftAlignTb4b4b4(Tffa657int Te6edf3x_anchTb4b4b4, Tffa657int Te6edf3yTb4b4b4, Tff7b72const Tffa657charTff7b72* Te6edf3strTb4b4b4) Tb4b4b4{
Te6edf3setCursorTb4b4b4(Te6edf3x_anchTb4b4b4, Te6edf3yTb4b4b4)Tb4b4b4;
Te6edf3printTb4b4b4(Te6edf3strTb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e// convert UTF-8 characters to displayable block characters for compatibility
Te6edf3virtual Tffa657void Te6edf3translateUTF8ToBlocksTb4b4b4(Tffa657charTff7b72* Te6edf3destTb4b4b4, Tff7b72const Tffa657charTff7b72* Te6edf3srcTb4b4b4, Tffa657size_t Te6edf3dest_sizeTb4b4b4) Tb4b4b4{
Tffa657size_t Te6edf3j Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72for Tb4b4b4(Tffa657size_t Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3srcTb4b4b4[Te6edf3iTb4b4b4] Tff7b72!Tff7b72= T79c0ff0 Tff7b72&Tff7b72& Te6edf3j Tff7b72< Te6edf3dest_size Tff7b72- T79c0ff1Tb4b4b4; Te6edf3iTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Tffa657unsigned Tffa657char Te6edf3c Tff7b72= Tb4b4b4(Tffa657unsigned Tffa657charTb4b4b4)Te6edf3srcTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3c Tff7b72>Tff7b72= T79c0ff32 Tff7b72&Tff7b72& Te6edf3c Tff7b72<Tff7b72= T79c0ff126Tb4b4b4) Tb4b4b4{
Te6edf3destTb4b4b4[Te6edf3jTff7b72+Tff7b72+Tb4b4b4] Tff7b72= Te6edf3cTb4b4b4; T8b949e// ASCII printable
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3c Tff7b72>Tff7b72= T79c0ff0x80Tb4b4b4) Tb4b4b4{
Te6edf3destTb4b4b4[Te6edf3jTff7b72+Tff7b72+Tb4b4b4] Tff7b72= Ta5d6ff'Ta5d6ff\xDBTa5d6ff'Tb4b4b4; T8b949e// CP437 full block █
Tff7b72while Tb4b4b4(Te6edf3srcTb4b4b4[Te6edf3iTff7b72+T79c0ff1Tb4b4b4] Tff7b72&Tff7b72& Tb4b4b4(Te6edf3srcTb4b4b4[Te6edf3iTff7b72+T79c0ff1Tb4b4b4] Tff7b72& T79c0ff0xC0Tb4b4b4) Tff7b72=Tff7b72= T79c0ff0x80Tb4b4b4)
Te6edf3iTff7b72+Tff7b72+Tb4b4b4; T8b949e// skip UTF-8 continuation bytes
Tb4b4b4}
Tb4b4b4}
Te6edf3destTb4b4b4[Te6edf3jTb4b4b4] Tff7b72= T79c0ff0Tb4b4b4;
Tb4b4b4}
T8b949e// draw text with ellipsis if it exceeds max_width
Te6edf3virtual Tffa657void Te6edf3drawTextEllipsizedTb4b4b4(Tffa657int Te6edf3xTb4b4b4, Tffa657int Te6edf3yTb4b4b4, Tffa657int Te6edf3max_widthTb4b4b4, Tff7b72const Tffa657charTff7b72* Te6edf3strTb4b4b4) Tb4b4b4{
Tffa657char Te6edf3temp_strTb4b4b4[T79c0ff256Tb4b4b4]Tb4b4b4; T8b949e// reasonable buffer size
Tffa657size_t Te6edf3len Tff7b72= Te6edf3strlenTb4b4b4(Te6edf3strTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3len Tff7b72>Tff7b72= Tff7b72sizeofTb4b4b4(Te6edf3temp_strTb4b4b4)Tb4b4b4) Te6edf3len Tff7b72= Tff7b72sizeofTb4b4b4(Te6edf3temp_strTb4b4b4) Tff7b72- T79c0ff1Tb4b4b4;
Te6edf3memcpyTb4b4b4(Te6edf3temp_strTb4b4b4, Te6edf3strTb4b4b4, Te6edf3lenTb4b4b4)Tb4b4b4;
Te6edf3temp_strTb4b4b4[Te6edf3lenTb4b4b4] Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3getTextWidthTb4b4b4(Te6edf3temp_strTb4b4b4) Tff7b72<Tff7b72= Te6edf3max_widthTb4b4b4) Tb4b4b4{
Te6edf3setCursorTb4b4b4(Te6edf3xTb4b4b4, Te6edf3yTb4b4b4)Tb4b4b4;
Te6edf3printTb4b4b4(Te6edf3temp_strTb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
T8b949e// for variable-width fonts (GxEPD), add space after ellipsis
T8b949e// for fixed-width fonts (OLED), keep tight spacing to save precious characters
Tff7b72const Tffa657charTff7b72* Te6edf3ellipsisTb4b4b4;
T8b949e// use a simple heuristic: if 'i' and 'l' have different widths, it's variable-width
Tffa657int Te6edf3i_width Tff7b72= Te6edf3getTextWidthTb4b4b4(Ta5d6ff"Ta5d6ffiTa5d6ff"Tb4b4b4)Tb4b4b4;
Tffa657int Te6edf3l_width Tff7b72= Te6edf3getTextWidthTb4b4b4(Ta5d6ff"Ta5d6fflTa5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3i_width Tff7b72!Tff7b72= Te6edf3l_widthTb4b4b4) Tb4b4b4{
Te6edf3ellipsis Tff7b72= Ta5d6ff"Ta5d6ff... Ta5d6ff"Tb4b4b4; T8b949e// variable-width fonts: add space
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3ellipsis Tff7b72= Ta5d6ff"Ta5d6ff...Ta5d6ff"Tb4b4b4; T8b949e// fixed-width fonts: no space
Tb4b4b4}
Tffa657int Te6edf3ellipsis_width Tff7b72= Te6edf3getTextWidthTb4b4b4(Te6edf3ellipsisTb4b4b4)Tb4b4b4;
Tffa657int Te6edf3str_len Tff7b72= Te6edf3strlenTb4b4b4(Te6edf3temp_strTb4b4b4)Tb4b4b4;
Tff7b72while Tb4b4b4(Te6edf3str_len Tff7b72> T79c0ff0 Tff7b72&Tff7b72& Te6edf3getTextWidthTb4b4b4(Te6edf3temp_strTb4b4b4) Tff7b72> Te6edf3max_width Tff7b72- Te6edf3ellipsis_widthTb4b4b4) Tb4b4b4{
Te6edf3temp_strTb4b4b4[Tff7b72-Tff7b72-Te6edf3str_lenTb4b4b4] Tff7b72= T79c0ff0Tb4b4b4;
Tb4b4b4}
Te6edf3strcatTb4b4b4(Te6edf3temp_strTb4b4b4, Te6edf3ellipsisTb4b4b4)Tb4b4b4;
Te6edf3setCursorTb4b4b4(Te6edf3xTb4b4b4, Te6edf3yTb4b4b4)Tb4b4b4;
Te6edf3printTb4b4b4(Te6edf3temp_strTb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3virtual Tffa657void Te6edf3endFrameTb4b4b4(Tb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Tb4b4b4}Tb4b4b4;

Served by rngit 1.5.0 - Generated in 0.07s